

struct ShouldntAnalyze
{
	int a;
	ShouldntAnalyze();
};

struct TrivialError //Should result in two errors
{
	int* a;
	TrivialError()
	{
	}
	TrivialError(int error2);
};

TrivialError::TrivialError(int error2)
{
}

struct NoError
{
	int a;
	static int b;
	ShouldntAnalyze complexObject; 
	NoError(int x);
	
	NoError() :
		NoError(2)
	{
	}
private:
	NoError(char c)
	{
	}
};

NoError::NoError(int x) :
		a(x)
{
}


int external(int * k)
{
	*k = 42;
	return *k;
}

template <typename T>
int external2(T& k)
{
	k = 41;
	return k;
}

struct MoreComplicatedNoError
{
	int a;
	int b;
	MoreComplicatedNoError()
	{
		a = 4;
		external2(b);
	}
	
	MoreComplicatedNoError(int x)
	{
		Init(x);
	}
	
	void Init(int y)
	{
		a = external(&y);
		external(&b);
	}
	
	MoreComplicatedNoError(char c)
		: a(external(&b))
	{
	}
};

int main(int argc, char * argv[])
{
}